import org.junit.jupiter.api.Test;

import java.util.Arrays;

public class _31_下一个排列 {
    @Test
    public void test(){
        int[] ints = {2, 3, 1};
        Arrays.sort(ints,1,3);
        System.out.println(Arrays.toString(ints));
    }

    /**
     * 排序就是从最后面的元素开始与前面的元素比较，要是前面的元素比最后一个元素要小的话就交换，然后将前面
     * 元素后面的元素进行排序，就是下一个最小的值，要是没有比最后一个更小的值，就往前遍历
     *
     * @param nums
     */
    public void nextPermutation(int[] nums) {
        //从后往前遍历
        //第一个left
        for (int i = nums.length-2; i >=0 ; i--) {
            //第二个right,left要在right左边
            for (int j = nums.length-1; j >i ; j--) {
                if (nums[j]>nums[i]){
                    //说明可以交换
                    swap(nums,i,j);
                    //将i后面的元素进行排序
                    //Arrays.sort排序包前不包后
                    Arrays.sort(nums,i+1,nums.length);
                    return;
                }
            }
        }
        //要是上面没有返回的话，就说明nums是降序排列的
        Arrays.sort(nums);
        return;
    }

    public void swap(int [] nums,int a,int b){
        int temp=nums[a];
        nums[a]=nums[b];
        nums[b]=temp;
    }


}
